package com.yugao.fintech.antelope.auth.service;

import com.yugao.fintech.antelope.auth.model.rqrs.oauth2.TokenContextBuildReq;
import com.yugao.fintech.antelope.auth.oauth2.OAuth2TokenContext;
import com.yugao.fintech.antelope.auth.oauth2.model.OAuth2TokenResp;
import com.yugao.fintech.antelope.base.model.module.auth.LoginUser;

public interface OAuth2TokenService {
    /**
     * 获取当前被授权的用户信息
     *
     * @return 用户信息
     */
    LoginUser getLoginUser();

    /**
     * 更新当前授权用户身份信息
     */
    void updateLoginUser(LoginUser loginUser);

    OAuth2TokenResp issueToken(OAuth2TokenContext tokenContext);

    OAuth2TokenContext buildTokenContent(TokenContextBuildReq req);

    OAuth2TokenResp checkAccessToken(String accessToken);

    OAuth2TokenResp parseAccessToken(String accessToken);

    /**
     * 移除访问令牌
     * 注意：该流程中，会移除相关的刷新令牌
     * <p>
     * 参考 DefaultTokenServices 的 revokeToken 方法
     *
     * @param accessToken 刷新令牌
     * @return 访问令牌的信息
     */
    boolean removeAccessToken(String accessToken);

    /**
     * 通过用户id删除访问令牌
     *
     * @param userId 用户id
     */
    boolean removeAccessTokenByUserId(Long userId);

    /**
     * 刷新访问令牌
     * <p>
     * 参考 DefaultTokenServices 的 refreshAccessToken 方法
     *
     * @return 访问令牌的信息
     */
    OAuth2TokenResp refreshAccessToken(String refreshToken);
}
